//
//  NSDate+Extension.swift
//  Weibo
//
//  Created by 姜维克 on 16/5/27.
//  Copyright © 2016年 姜维克. All rights reserved.
//

import UIKit

//定义日期格式化对象--统一的全局属性,防止重复创建
//let sharedDF = NSDateFormatter()在统一管理的属性文件设置好了

extension NSDate{
    
    
    //类方法
    class func stringToDate(dateStr:String)->NSDate{
        //设置日期格式化字符串
        sharedDF.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        
        //MARK:设置本地区域标识 --不设置的话,模拟器上正常,但是真机会崩溃
        sharedDF.locale = NSLocale(localeIdentifier: "cn")
        
        //把日期字符串用格式化字符串转换成格式化的日期
        
        let sinaDate = sharedDF.dateFromString(dateStr)!
        
        return sinaDate
    }
    
    
    //对象方法 
    func dateToString()->String{
        //计算给定的日期和当前的日期的差值,按照下面的模式来得到对应的日期字符串
        
        //1.获取当前的日历--功能强大
        let current = NSCalendar.currentCalendar()
        let nowData = NSDate()
        
        //2.根据模式来利用差值得到不同的日期格式化字符串
        //如果在当天之内
        if current.isDateInToday(self){
            //计算差值
//            NSTimeInterval是Double类型
            let delta = Int(nowData.timeIntervalSinceDate(self))
            
            //如果在一分钟之内
            if delta < 60{
                return "刚刚"
            }else if delta < 60*60{
                //如果是一个小时之内
                return "\(delta/60)分钟前"
            }else {
                //如过大于等于1个小时了
                return "\(delta/(60*60))小时前"
                
            }
            //当天之内直接就可以返回日期字符串,不用利用格式化对象sharedDF
            
        }else{
            //不在今天之内,会产生一个通用的格式化字符串
            let common = "HH:mm"
            //如果在昨天之内
            if current.isDateInYesterday(self) {
                sharedDF.dateFormat = "昨天" + common
            }else {
                //计算两个日期的年份差距
                let yearDelta = current.components(.Year, fromDate: self, toDate: nowData, options: [])
                if yearDelta == 0{
                    //如果是今年的
                    sharedDF.dateFormat = "MM-dd" + common
                }else{
                    //不是今年
                    sharedDF.dateFormat = "yyyy-MM-dd" + common
                }
                
            }
            
            //利用格式化字符串来获取日期字符串
            let dataStr = sharedDF.stringFromDate(self)
            return dataStr
        }
        
    }
    
}

//- 微博时间
//  -在今天之内
//    - 在一分钟之内 显示 一分钟内
//    - 在一个小时内 显示 在多少分钟前
//    - 在一天之内   显示 在多少小时之前
//  - 在昨天之内   显示 昨天 HH:mm
//  - 在昨天之前 && 在当年之内  显示 MM-dd HH:mm
//  - 不在当年之内 显示 yyyy-MM-dd HH:mm
